/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package digitrencer;

import java.util.ArrayList;

/**
 * Az oszcilloszkópot megvalósító osztály. A hálózat szimulációja során
 * regisztrálja a bemenetére érkező jeleket.
 * @author Balázs, Ádám
 */
public class Oscilloscope extends Output{
        private ArrayList<Boolean> history;


        /**
         * Konstruktor, meghívja az Output osztály konstruktorát, majd ellenőrzi,
         * hogy hány kimeneti illetve bemeneti vezetéket kapott.
         * Amennyiben több, mint egy bemeneti, illetve több mint 0 kimeneti
         * vezetéket kapott, hibát dob, mivel a Oscilloscope-nak legfeljebb egy
         * bemenete lehet, kimenete pedig nincsen.
         * @param inputs    Bemeneti vezetékek
         * @param outputs   Kimeneti vezetékek
         * @throws IllegalArgumentException Amennyiben nem csak egy bemeneti
         * vezeték van.
         */
        Oscilloscope(Wire[] inputs, Wire[] outputs) throws IllegalArgumentException{ //corrected by Gergő
            super(inputs,outputs);
            if (inputs.length > 1) {
                throw new IllegalArgumentException("Can only store one wire's history");
            }
            history = new ArrayList<Boolean>();
        }

        /**
         * A history lista végére beállítjuk az egy bemeneten érkező aktuális értéket.
         */
        public void register(){
            history.add(this.value[0]);
        }
        
        /**
        * Egyesével lemásoljuk a history elemeit a val tömbbe.
        * @return A history másolata.
        */
        boolean[] getHistory(){
            boolean[] val = new boolean[history.size()];
            int i = 0;
            for (Boolean b : history)
                val[i++] = b.booleanValue();
            return val;
        }

        /**
         * Töröljük a history-t, és letrehozunk helyette egy újat.
         */
        public void reset(){
            history = new ArrayList<Boolean>();
        }
}
